/**
 * 计算带单位大小值占5GB的百分比（小于1M按1M算）
 * @param {string} sizeWithUnit - 带单位的原始值（如"12.2B"、"3M"、"0.8K"）
 * @returns {string} 占比百分比（如"0.02%"、"0.06%"）
 */
export function calcPercentOf5GB(sizeWithUnit) {
	// 1. 固定常量：5GB对应的总字节数（1GB=1024³B，5GB=5×1024³）
	const FIVE_GB_BYTES = 5 * 1024 * 1024 * 1024; // 5368709120 字节
	// 1M对应的总字节数（用于“小于1M按1M算”的规则）
	const ONE_M_BYTES = 1024 * 1024; // 1048576 字节
	// 2. 正则提取数值和单位（兼容整数/小数、空格、大小写，如"12.2 B"、"3m"）
	const match = String(sizeWithUnit).match(/(\d+\.?\d*)\s*([BbKkMmGg])/);
	// 匹配失败时，默认按1M计算
	if (!match) return ((ONE_M_BYTES / FIVE_GB_BYTES) * 100).toFixed(2) + '%';
	// 3. 解析数值和单位
	const [, numStr, unit] = match;
	const num = Number(numStr); // 提取的数值（如"12.2"→12.2，"3"→3）
	const unitUpper = unit.toUpperCase(); // 单位统一转大写（b→B、k→K等）
	// 4. 单位转字节的映射表（1024进制）
	const unitToBytesMap = {
		B: 1, // 1B = 1字节
		K: 1024, // 1K = 1024B
		M: 1024 * 1024, // 1M = 1024K
		G: 1024 ** 3 // 1G = 1024M
	};
	// 5. 计算当前值的总字节数（并应用“小于1M按1M算”的规则）
	let currentBytes = num * unitToBytesMap[unitUpper];
	currentBytes = currentBytes < ONE_M_BYTES ? ONE_M_BYTES : currentBytes;

	// 6. 计算占5GB的百分比（保留2位小数）
	const percent = (currentBytes / FIVE_GB_BYTES) * 100;
	return percent.toFixed(2);
}
/**
 * 将字节数转换为 KB/MB/GB 格式（保留两位小数）
 * @param {number} bytes - 传入的字节数（必须为非负数字）
 * @returns {string} 带单位的格式化字符串（如 "1.23 KB", "4.56 MB"）
 */
export function formatFileSize(bytes) {
	// 处理边界值：非数字或负数默认返回 "0.00 KB"
	if (typeof bytes !== 'number' || bytes < 0) {
		return "0.00 KB";
	}
	// 单位数组：顺序对应 B → KB → MB → GB（1024 进制）
	const units = ["B", "KB", "MB", "GB"];
	// 计算当前字节数对应的单位索引（默认从 B 开始，最多到 GB）
	let unitIndex = 0;
	let size = bytes;

	// 循环转换单位，直到数值 < 1024 或达到 GB 单位
	while (size >= 1024 && unitIndex < units.length - 1) {
		size /= 1024; // 除以 1024 切换到上一级单位
		unitIndex++; // 单位索引+1（B→KB→MB→GB）
	}

	// 保留两位小数，并拼接单位（toFixed 会自动四舍五入）
	return `${size.toFixed(2)} ${units[unitIndex]}`;
}
export function get_oldname_before(name) {
	// 找到最后一个小数点的位置
	const lastDotIndex = name.lastIndexOf('.');
	if (lastDotIndex > -1) {
		// 有小数点：分割成前缀和后缀（含小数点）
		const prefix = name.substring(0, lastDotIndex); // 最后一个小数点前的部分
		// 在前缀后添加内容，再拼接小数点及后面的部分
		return prefix;
	}
}
export function get_oldname_after(name) {
	// 找到最后一个小数点的位置
	const lastDotIndex = name.lastIndexOf('.');
	if (lastDotIndex > -1) {
		// 有小数点：分割成前缀和后缀（含小数点）
		const dotAndRest = name.substring(lastDotIndex); // 最后一个小数点及后面的部分
		// 在前缀后添加内容，再拼接小数点及后面的部分
		return dotAndRest;
	}
}
export function jojn_inputandname(inputvalue, oldname) {
	// 找到最后一个小数点的位置
	const lastDotIndex = oldname.lastIndexOf('.');
	if (lastDotIndex > -1) {
		// 有小数点：分割成前缀和后缀（含小数点）
		const dotAndRest = oldname.substring(lastDotIndex); // 最后一个小数点及后面的部分
		// 在前缀后添加内容，再拼接小数点及后面的部分
		return inputvalue.before.trim() + inputvalue.after.trim() + dotAndRest;
	}
}
/**
 * 处理名称：按小数点分割，取前面部分并添加内容
 * @param {string} name - 原始名称
 * @param {string} suffix - 要添加的后缀内容（默认添加"_processed"）
 * @returns {string} 处理后的名称
 */
export function getProcessedName(inputvalue, oldname, suffix, push_old_name_flag, old_name_nosuffix) {
	// 找到最后一个小数点的位置
	const lastDotIndex = oldname.lastIndexOf('.');
	if (lastDotIndex > -1) {
		// 有小数点：分割成前缀和后缀（含小数点）
		const dotAndRest = oldname.substring(lastDotIndex); // 最后一个小数点及后面的部分
		// 在前缀后添加内容，再拼接小数点及后面的部分
		if (push_old_name_flag) {
			return inputvalue.before.trim() + old_name_nosuffix + inputvalue.after.trim() + String(suffix) + dotAndRest;
		} else {
			return inputvalue.before.trim() + inputvalue.after.trim() + String(suffix) + dotAndRest;
		}
	}
}
export function name_splicing(inputvalue, oldname,suffix, push_suffix_flag) {
	// 找到最后一个小数点的位置
	const lastDotIndex = oldname.lastIndexOf('.');
	if (lastDotIndex > -1) {
		// 有小数点：分割成前缀和后缀（含小数点）
		const prefix = oldname.substring(0, lastDotIndex); // 最后一个小数点前的部分
		const dotAndRest = oldname.substring(lastDotIndex); // 最后一个小数点及后面的部分
		// 在前缀后添加内容，再拼接小数点及后面的部分
		if(push_suffix_flag){
			return inputvalue.before.trim() + prefix + inputvalue.after.trim()+String(suffix) + dotAndRest;
		}else{
			return inputvalue.before.trim() + prefix + inputvalue.after.trim()+ dotAndRest;
		}
	}
}